package cn.wywk.netty.push.example.config;

import io.netty.channel.Channel;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.util.concurrent.GlobalEventExecutor;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @description: netty配置类
 * <code>
 *     这里建立一个channel组，管理所有的channel，再定义一个map，管理用户与channel的对应关系。
 *     如果是分布式系统 需要用到分布式集合 比如redission
 * </code>
 * @projectName:netty-push-example
 * @see:cn.wywk.netty.push.example.config
 * @author:zhangwenxue
 * @createTime:2021/3/2 16:44
 * @version:1.0
 */
public class NettyConfig {

    /**
     * @description  定义一个channel组,
     * 管理所有的channel * GlobalEventExecutor.INSTANCE
     * 是全局的事件执行器，是一个单例
     **/
    private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

    /**
     * @description  存放用户与Chanel的对应信息，用于给指定用户发送消息
     **/
    private static Map<String, Channel> userChannelMap = new ConcurrentHashMap<>(256);

    private NettyConfig() {}

    /** * 获取channel组 * @return */
    public static ChannelGroup getChannelGroup() {
        return channelGroup;
    }

    /** * 获取用户channel map * @return */
    public static Map<String,Channel> getUserChannelMap(){
        return userChannelMap;
    }

}
